package router

import (
	"go-admin/define"
	"go-admin/middleware"
	"go-admin/service"

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)

func App() *gin.Engine {
	r := gin.Default()
	// 添加跨域中间件
	r.Use(middleware.Cors())
	//日志中间件
	// r.Use(middleware.LoggerToDb())

	// sessions 中间件
	store := cookie.NewStore([]byte("secret"))
	store.Options(sessions.Options{
		Secure:   true,
		SameSite: 4,
		Path:     "/",
		MaxAge:   3600,
	})
	r.Use(sessions.Sessions("admin-session", store))

	// 根据用户名和密码登录路由
	r.POST("/login/password", service.LoginPassword)
	r.Static("/uploadFile", define.StaticResource)

	//登录信息认证
	loginAuth := r.Group("/").Use(middleware.LoginAuthCheck())
	{
		//上传图片文件
		loginAuth.POST("/upload/file", service.UploadFile)
	}

	{
		// 管理员数据获取
		loginAuth.GET("/user", service.GetUserList)
		// 新增管理员
		loginAuth.POST("/user", service.AddUser)
		// 获取管理员详情信息
		loginAuth.GET("/user/detail/:id", service.GetUserDetail)
		// 更新管理员信息
		loginAuth.PUT("/user", service.UpdateUser)
		// 删除管理员信息
		loginAuth.DELETE("/user/:id", service.DeleteUser)
		// 更新个人信息
		loginAuth.PUT("/user/updateInfo", service.UpdateInfo)
		// 发送邮件
		loginAuth.GET("/user/sendEmail", service.SendEmail)
		// 校验邮箱验证码
		loginAuth.GET("/user/verifyCode", service.VerifyCode)
		// 更新绑定邮箱
		loginAuth.PUT("/user/updateEmail", service.UpdateEmail)
		// 更改个人密码
		loginAuth.PUT("/user/updatePwd", service.UpdatePwd)
	}

	{
		loginAuth.GET("/role", service.GetRoleList)
		loginAuth.POST("/role", service.AddRole)
		loginAuth.GET("/role/detail/:id", service.GetRoleDetail)
		loginAuth.PUT("/role", service.UpdateRole)
		// 删除角色信息
		loginAuth.DELETE("/role/:id", service.DeleteRole)
		// 修改角色管理员身份
		loginAuth.PATCH("/role/:id/:isAdmin", service.PatchRoleAdmin)

		//获取所有角色
		loginAuth.GET("/role/all", service.AllRole)
	}

	{
		//菜单列表
		loginAuth.GET("/menu", service.GetMenuList)
		// 新增菜单列表
		loginAuth.POST("/menu", service.AddMenu)
		// 更新菜单
		loginAuth.PUT("/menu", service.UpdateMenu)
		// 删除菜单
		loginAuth.DELETE("/menu/:id", service.DeleteMenu)
	}
	{
		//日志管理
		loginAuth.GET("/log", service.GetLogList)
	}

	{
		//互联网IP管理 -- 为方便测试，先不适用登录授权
		//初始化
		// loginAuth.POST("/ippublic", service.AddIpPublic)
		// r.POST("/ippublic", service.AddIpPublic)
		//获取列表
		r.GET("/ippublic", service.GetIpPublicList)
	}

	return r
}
